import { getDictListByType } from '@/api/api.js'

// 字典类型常量
export const DICT_TYPES = {
  POLICY_LEVEL: '21',   // 政策层级
  INDUSTRY_TYPE: '22',  // 行业分类
  POLICY_TYPE: '23'     // 政策类型
}

const state = {
  dictData: {}, // 格式: { dictType: [{label, value}] }
  loading: {} // 记录各个字典类型的加载状态，避免重复请求
}

const mutations = {
  // 设置字典数据
  SET_DICT_DATA(state, { dictType, data }) {
    state.dictData[dictType] = data
  },
  // 设置加载状态
  SET_LOADING_STATE(state, { dictType, isLoading }) {
    state.loading[dictType] = isLoading
  }
}

const actions = {
  // 加载字典数据，如果已经加载过则直接从缓存返回
  async loadDict({ commit, state }, dictType) {
    // 如果已经在加载中或已加载，则跳过
    if (state.loading[dictType] || state.dictData[dictType]) {
      return state.dictData[dictType] || []
    }
    
    // 设置加载状态为true
    commit('SET_LOADING_STATE', { dictType, isLoading: true })
    
    try {
      const res = await getDictListByType(dictType)
      if (res.code === 0) {
        const dictList = res.data.map(item => ({
          label: item.dictLabel,
          value: item.dictValue
        }))
        
        // 存储字典数据
        commit('SET_DICT_DATA', { dictType, data: dictList })
        return dictList
      }
      return []
    } catch (error) {
      console.error(`获取字典数据(${dictType})失败:`, error)
      return []
    } finally {
      commit('SET_LOADING_STATE', { dictType, isLoading: false })
    }
  },
  
  // 加载所有常用字典
  async loadAllDict({ dispatch }) {
    await Promise.all([
      dispatch('loadDict', DICT_TYPES.POLICY_LEVEL),
      dispatch('loadDict', DICT_TYPES.INDUSTRY_TYPE),
      dispatch('loadDict', DICT_TYPES.POLICY_TYPE)
    ])
  },
  
  // 清除字典缓存
  clearDict({ commit }, dictType) {
    if (dictType) {
      commit('SET_DICT_DATA', { dictType, data: null })
    } else {
      // 清除所有字典缓存
      Object.keys(DICT_TYPES).forEach(key => {
        commit('SET_DICT_DATA', { dictType: DICT_TYPES[key], data: null })
      })
    }
  }
}

const getters = {
  // 获取带全部选项的字典列表
  getDictWithAll: (state) => (dictType) => {
    const dictList = state.dictData[dictType] || []
    return [{ label: '全部', value: -1 }, ...dictList]
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
} 